package com.wechat.utils.kit;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Time {
	
	/**
	 * 默认的日期时间格式化字符串
	 */
	public static String dateTimeFormate = "yyyy-MM-dd HH:mm:ss";
	
	/**
	 * 默认的日期格式化字符串
	 */
	public static String dateFormate = "yyyy-MM-dd";
	
	/**
	 * 默认的时间格式化字符串
	 */
	public static String timeFormate = "HH:mm:ss";

	/**
	 * 获取当前系统时间戳，精确到毫秒，13位数字
	 * @return
	 */
	public static long getTimestamp(){
		return System.currentTimeMillis();
	}
	
	/**
	 * 获取当前系统时间戳，精确到秒，10位数字
	 * @return
	 */
	public static long getUnixTimestamp(){
		return (long) (System.currentTimeMillis()/1000);
	}


	/**
	 * 通过时间戳返回Date对象
	 * @param timestamp
	 * @return
	 */
	public static Date timestampToDate(long timestamp){
		if(timestamp > 9999999999L){
			return new Date(timestamp);
		}
		return new Date(timestamp * 1000);
	}
	
	/**
	 * 从Date对象获取时间戳，精确到毫秒，13位数字
	 * @param date
	 * @return
	 */
	public static long timestampFromDate(Date date){
		return date.getTime();
	}
	
	/**
	 * 从Date对象获取时间戳，精确到毫秒，10位数字
	 * @param date
	 * @return
	 */
	public static long UnixTimestampFromDate(Date date){
		return (long) (date.getTime()/1000);
	}
	
	/**
	 * 获取格式化的时间
	 * @param date
	 * @return
	 */
	public static String toString(Date date){
		return toString(date, dateTimeFormate);
	}
	
	/**
	 * 获取格式化的时间
	 * @param date
	 * @return
	 */
	public static String toString(Date date, String format){
		SimpleDateFormat formater = new SimpleDateFormat(format);
		return formater.format(date);
	}
	
	/**
	 * 获取格式化的时间
	 * @param timestamp
	 * @return
	 */
	public static String toString(long timestamp){
		return toString(timestampToDate(timestamp));
	}
	
	/**
	 * 获取格式化的时间
	 * @param timestamp
	 * @return
	 */
	public static String toString(long timestamp, String format){
		return toString(timestampToDate(timestamp), format);
	}
	
	/**
	 * 从字符串时间解析时间
	 * @param time
	 * @return
	 */
	public static Date parse(String time){
		return parse(time, dateTimeFormate);
	}
	
	/**
	 * 从字符串时间解析时间
	 * @param time
	 * @param format
	 * @return
	 */
	public static Date parse(String time, String format){
		SimpleDateFormat formater = new SimpleDateFormat(format);
		Date datetime;
		try {
			datetime = formater.parse(time);
		} catch (ParseException e) {
			datetime = null;
		}
		return datetime;
	}
	
	/**
	 * 从字符串时间解析时间戳
	 * @param time
	 * @return
	 */
	public static long timestampFromString(String time){
		return timestampFromString(time, dateTimeFormate);
	}
	
	/**
	 * 从字符串时间解析时间戳
	 * @param time
	 * @param format
	 * @return
	 */
	public static long timestampFromString(String time, String format){
		Date datetime = parse(time);
		if(datetime != null){
			return timestampFromDate(datetime);
		}
		return 0;
	}


	/**
	 * 2016-04-23
	 * MrWang
	 *
	 * 在指定时间上 +、- 指定的天数
	 * @param days +-的天数
	 * @param date 操作的时间
	 * @param format 格式化时间方式
	 * @return
	 * @throws ParseException
     */
	public static String addDay(int days,Date date,String format) {
		SimpleDateFormat sdf=new SimpleDateFormat(format);
		Calendar rightNow = Calendar.getInstance();
		try {
			rightNow.setTime(sdf.parse(sdf.format(date)));
		} catch (ParseException e) {
			e.printStackTrace();
		}
		rightNow.add(Calendar.DAY_OF_YEAR,days);
		date=rightNow.getTime();
		return sdf.format(date);
	}
}
